package com.ncmmall.domain.business.marketing.coupon;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.ncmmall.domain.business.goods.Goods;
import com.ncmmall.domain.security.user.WebUser;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 * 优惠券
 *
 * @author linxs
 * @date 2019-10-24 11:25
 */
@Entity
@Table(name = "mall_coupon")
@Access(AccessType.FIELD)
@Getter
@Setter
public class Coupon {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    /**
     * 所属商家
     */
    @JsonBackReference
    @OneToOne
    private WebUser merchant;

    /**
     * 优惠券类型
     * 1、满减劵
     * 2、赠品劵
     */
    private int type;

    /**
     * 优惠券名称
     */
    private String name;

    /**
     * 使用门槛金额
     */
    private double conditionAmount;

    /**
     * 发放数量
     */
    private int releasedQuantity;

    /**
     * 领取数量
     */
    private int drawQuantity;

    /**
     * 有效期类型
     * 1、固定日期
     * 2、领取后几天内可用
     */
    private int validityType;

    /**
     * 有效期开始时间
     */
    private String validityBeginDay;

    /**
     * 有效期到期时间
     */
    private String validityEndDay;

    /**
     * 领取后可用天数
     */
    private int validityDay;

    /**
     * 适用商品范围
     * 1、全部商品可用
     * 2、指定商品
     */
    private int scopeType;

    /**
     * 面值金额（满减劵有效）
     */
    private double denominationAmount;


    /**
     * 赠品商品（赠品劵有效）
     */
    @OneToOne
    private Goods complimentaryGoods;

    /**
     * 状态
     * 1、待审核
     * 2、审核通过
     * 3、审核不通过
     * 4、审核中
     * 5、已领完
     */
    private int status;

    /**
     * 上架状态
     * 1、下架
     * 2、上架
     */
    private int publishStatus;

    /**
     * 是否精选
     * 1、否
     * 2、是
     */
    private int choiceStatus;

    /**
     * 审核不通过原因
     */
    private String note;

    /**
     * 创建时间
     */
    private Timestamp createTime;

    @JsonBackReference
    @Transient
    private String channelData;

    @JsonBackReference
    @Transient
    private String goodsesData;

    @Transient
    private List<CouponGoods> goodses = new ArrayList<>();

    @Transient
    private Long[] scopeGoodsIds = {};

    /**
     * 领取状态
     */
    @Transient
    private int getStatus;

    /**
     * 领取时间
     */
    @Transient
    private Timestamp drawTime;

    /**
     * 到期时间
     */
    @Transient
    private Timestamp expirationTime;

}
